package com.far.game.xiuzhen.common.utils;

import cn.hutool.core.util.ObjectUtil;


import cn.hutool.json.JSONUtil;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.auth0.jwt.interfaces.Payload;
import com.far.game.xiuzhen.common.dto.Visitor;
import com.far.game.xiuzhen.common.exception.BizException;

import java.math.BigInteger;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.RSAPublicKeySpec;
import java.util.Base64;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;



public class JWTUtil {

//    /**
//     * @param token
//     * @param key
//     * @description: 验证是否过期
//     * @return: boolean
//     * @author mike/Fang.J/Q184377367
//     * @date: 2022/3/13 18:49
//     */
//    public static boolean verifyTime(String token, String key) {
//        // String key = "aabb";
//        // String token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJwYXNzV29yZCI6IjY2Njg4OSIsIm5iZiI6MTYzNTE1MDI3NiwiZXhwIjoxNjM1MTUwODc2LCJ1c2VyTmFtZSI6InpoYW5nc2FuIiwiaWF0IjoxNjM1MTUwMjc2fQ.Cq2AHyrZ-Q7U7O5BBPdEIBrm7aDtjQh4ZDvtIcLzQvg";
//        JWT jwt = cn.hutool.jwt.JWTUtil.parseToken(token);
//        boolean verifyKey = jwt.setKey(key.getBytes()).verify();
//
//        boolean verifyTime = jwt.validate(0);
//        return verifyTime;
//    }
//
//
//    public static <T> T get(String token, String key,String idx) {
//        // String key = "aabb";
//        // String token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJwYXNzV29yZCI6IjY2Njg4OSIsIm5iZiI6MTYzNTE1MDI3NiwiZXhwIjoxNjM1MTUwODc2LCJ1c2VyTmFtZSI6InpoYW5nc2FuIiwiaWF0IjoxNjM1MTUwMjc2fQ.Cq2AHyrZ-Q7U7O5BBPdEIBrm7aDtjQh4ZDvtIcLzQvg";
//        JWT jwt = cn.hutool.jwt.JWTUtil.parseToken(token);
//        boolean verifyKey = jwt.setKey(key.getBytes()).verify();
//
//        if (verifyKey) {
//            return (T) jwt.getPayload(idx);
//        } else {
//            return null;
//        }
//
//    }



    public static  Visitor getTokenForVisitor(String token){
        // 验证 token
//        JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(AppUtil.JWTKEY)).build();
        String us = JWT.decode(token).getAudience().get(0);
       // String pl = jwtVerifier.getAudience();
//        Payload result = jwtVerifier.verify(token  );

        return JSONUtil.toBean(us,Visitor.class);
    }
    // 过期时间2小时
    private static final long EXPIRE_TIME = 120 * 60 * 1000;


    public static String getJwtKey(Visitor visitor){
//        Map<String, Object> map = new HashMap<String, Object>() {
//            private static final long serialVersionUID = 1L;
//            {
//                put("userName", visitor.getUserName());
//                put("passwd", visitor.getPasswd());
//                put("userTid", visitor.getTid());
//                //半个月后token失效
//                put("expireTime", System.currentTimeMillis() + 1000 * 60 * 60 * 24 * 15);
//            }
//        };


        if(ObjectUtil.isEmpty(AppUtil.JWTKEY)){
            throw new BizException("jwt key must be set");
        }
       // Date date = new Date(System.currentTimeMillis() + EXPIRE_TIME);

        visitor.setToeknExpireTime(System.currentTimeMillis() + EXPIRE_TIME  );


        String token="";
//
//        token=JWT.create()
//                .withClaim("visitor", JSONUtil.toJsonStr(visitor))
//                .withExpiresAt(date)
//                .sign(Algorithm.HMAC256(AppUtil.JWTKEY));
//
        token= JWT.create().withAudience(JSONUtil.toJsonStr(visitor))
                .sign(Algorithm.HMAC256(AppUtil.JWTKEY));
        return token;

    }



}
